package com.cl.pattern.singleton.lazy;

/**
 * '懒汉式' 单例
 * 类加载的时候创建实例，等到用的时候才去创建
 * 绝对的线程安全，在线程还没创建之前就已经实例化了，不可能存在访问安全问题
 * @Author Small
 * @Date 2020/5/30 10:52
 * @Version 1.0
 **/
public class LazyOne {


    /**
     * 静态的本类实例
     */
    private static  LazyOne lazy = null;


    /**
     * 私有的构造方法
     */
    private LazyOne() {
    }


    /**
     * 公共的静态获取实例的方法
     * @return
     */
    public static LazyOne getInstance() {

        /*
         * 调用方法前先判断是否已经初始化了实例
         * 如果没有初始化，new 一个对象进行初始化
         *
        */
        if(lazy == null){
            //由于没有加锁，两个线程都会进入这个if里面，最终会创建不止一个实例
            lazy = new LazyOne();
        }
        //如果已经初始化，直接返回之前已经保存好的结果
        return lazy;
    }
}
